//
//  XYUserAccountViewModel.swift
//  WeiboSourceCode
//
//  Created by 周星宇 on 15/12/29.
//  Copyright © 2015年 cn.weibo. All rights reserved.
//

import UIKit

class XYUserAccountViewModel: NSObject {
    
    // 引用用户模型信息
    var xUserAount:XYUserAccount?
    var accessToken: String? {
        
        return xUserAount?.access_token
    }
    override init(){
        super.init()
        xUserAount = loadAccount()
    }
    // 判断账户是否过期
    // isExpiresIn 是否过期，如果是true代表过期，false 代表不过期
    var isExpiresIn: Bool {
        
        // 1. 必须知道当前账户的 accessToken 的过期时间
        
        if let expiresDate = xUserAount?.expiresDate {
            
            // 2. 拿着第1步求出的过期时间与当前时间进行对比
            let nowDate = NSDate()
            
            //======= 以下是测试代码 =======//
            // expiresDate = nowDate.dateByAddingTimeInterval(-1)
            //======= 以上是测试代码 =======//
            print(expiresDate)
            // 3. 如果当前时间比过期时间小 --> 就代表没有过期
            if nowDate.compare(expiresDate) == .OrderedAscending {
                // 没有过期，返回false
                return false
            }
        }
        return true
    }
    // 用户是否登录
    var userLogin: Bool {
        // 判断 accessToken 是否为空 && 没有过期？？
        if accessToken != nil && isExpiresIn == false {
            // 返回 true 代表当前是登录状态
            return true
        }
        return false
    }
    // 定义归档 解档的路径
    private var path = (NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first! as NSString).stringByAppendingPathComponent("useraccount.archive")
    
    static let sharedUserAccountViewModel: XYUserAccountViewModel = XYUserAccountViewModel()
    // MARK: 获取登录令牌
    func getUserAccessToken(code:String, complete:(isSuccess:Bool) -> ()) {
        
        XYHTTPTool.sharedHttpTool.requestLoadAccount(code) { (response, error) -> () in
            
            if error != nil {
                print(error)
                complete(isSuccess: false)
                return
            }
            // 判断返回的是不是字典
            guard let dict = response as? [String: AnyObject] else {
                // 说明返回的不是字典
                complete(isSuccess: false)
                return
            }
            // 字典转模型
            let userAccount = XYUserAccount(dict: dict)
            // 获取用户信息
            self.loadUserInfo(userAccount, complete: complete)
        }
    }
    private func loadUserInfo(userAccount:XYUserAccount,complete:(isSuccess:Bool) -> ()) {

        XYHTTPTool.sharedHttpTool.requestLoadUserInfo(userAccount) { (response, error) -> () in
            if error != nil {
                    complete(isSuccess: false)
                    return
            }
            guard let dict = response as? [String: AnyObject] else{
                complete(isSuccess: false)
                return
            }
            // 设置头像
            userAccount.avatar_large = dict["avatar_large"] as? String
            // 设置用户昵称
            userAccount.screen_name = dict["screen_name"] as? String
            // 给属性赋值
            self.xUserAount = userAccount
            // 保存用户信息
            self.saveAount(userAccount)
            // 设置控制器跳转
            complete(isSuccess: true)
            
        }
    }
    
}
// MARK: 归档解档逻辑
extension XYUserAccountViewModel {
    // 保存用户信息
    private func saveAount(userAccount:XYUserAccount) {
      
        NSKeyedArchiver.archiveRootObject(userAccount, toFile: path)
    }
    func loadAccount() -> XYUserAccount? {
        
        return NSKeyedUnarchiver.unarchiveObjectWithFile(path) as? XYUserAccount
    }
    
}
